﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.Administration.Entities;
using HerGoS.Administration.Engine;
using HerGoS.Interfaces;
using HerGoS.ControlsUI;
using HerGoS.WebControlExtend;
using System.Web.Services;

namespace HerGoS.WebUI.Personas
{

    public partial class Persona_ABM : PageBase
    {

        #region Propiedades


        public Persona Persona
        {
            get
            {
                if (ViewState["persona"] != null)
                    return (Persona)ViewState["persona"];
                return null;
            }
            set
            {
                ViewState["persona"] = value;
            }

        }

        public int Contador
        {
            get
            {
                if (ViewState["contador"] != null)
                    return (int)ViewState["contador"];
                return 0;
            }
            set
            {
                ViewState["contador"] = value;
            }
        }

         public int contadorContrato
        {
            get
            {
                if (ViewState["contadorContrato"] != null)
                    return (int)ViewState["contadorContrato"];
                return 0;
            }
            set
            {
                ViewState["contadorContrato"] = value;
            }
        }


         public int contadorDomicilio
         {
             get
             {
                 if (ViewState["contadorDomicilio"] != null)
                     return (int)ViewState["contadorDomicilio"];
                 return 0;
             }
             set
             {
                 ViewState["contadorDomicilio"] = value;
             }
         }


         public int contadorCuentaBancaria
         {
             get
             {
                 if (ViewState["contadorCuentaBancaria"] != null)
                     return (int)ViewState["contadorCuentaBancaria"];
                 return 0;
             }
             set
             {
                 ViewState["contadorCuentaBancaria"] = value;
             }
         }


        #endregion

        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                LoadCombos();
                if (Request.QueryString["id"] == null)
                {
                    Persona = new Persona();
                    this.rbSexoM.Checked = !Persona.Sexo;
                }
                else
                {
                    var Id = Convert.ToInt32(Request.QueryString["id"]);
                    Persona = GestorPersona.Obtener(Id);
                    MappingFromObjectToControls();

                }
                Initialize();

            }
        }
        void Initialize()
        {

            this.GridContacto.Settings(new GridViewExtBasic());
            this.GridContacto.AllowPaging = false;
            this.btn_AltaContacto.Settings(new ButtonExtText());
            this.btn_Cerrar_dialog_contact.Settings(new ButtonExtText());
            this.btn_DialogContact.Settings(new ButtonExtText());
            this.btnCerrar.Settings(new ButtonExtText());
            this.btnGuardarPersona.Settings(new ButtonExtText());
            this.GridDomicilio.Settings(new GridViewExtBasic());
            this.GridDomicilio.AllowPaging = false;
            this.btn_AgregarDomicilio.Settings(new ButtonExtText());
            this.btn_Cerrar_dialog_domicilio.Settings(new ButtonExtText());
            this.btn_DialogDomicilio.Settings(new ButtonExtText());
            this.GridCuentaBancaria.Settings(new GridViewExtBasic());
            this.btn_AgregarCuentaBancaria.Settings(new ButtonExtText());
            this.btn_Cerrar_dialog_cuentaBancaria.Settings(new ButtonExtText());
            this.btn_DialogCuentaBancaria.Settings(new ButtonExtText()); ;
            
            this.GridContrato.Settings(new GridViewExtBasic());
            this.GridContrato.AllowPaging = false;
            this.btn_AgregarContrato.Settings(new ButtonExtText());
            this.btn_DialogContrato.Settings(new ButtonExtText());
            this.btn_Cerrar_dialog_contrato.Settings(new ButtonExtText()); 


            LoadGridContacts();
            LoadGridDomicilios();
            LoadGridCuentaBancarias();
            LoadGridContratos();
            LoadAutoria(Persona);
        }

        private void LoadGridContacts()
        {
            GridContacto.DataSource = GestorContacto.Activos(Persona);
            GridContacto.DataBind();
        }

        private void LoadGridDomicilios()
        {
            GridDomicilio.DataSource = GestorDomicilio.Activos(Persona);
            GridDomicilio.DataBind();
        }

        private void LoadGridCuentaBancarias()
        {
            this.GridCuentaBancaria.DataSource = GestorCuentaBancaria.Activas(Persona);
            GridCuentaBancaria.DataBind();

        }
        private void LoadGridContratos()
        {
            GridContrato.DataSource = GestorContrato.Activos(Persona);
            GridContrato.DataBind();
        }

        private void LoadCombos()
        {
            cboEstadoCivil.DataSource = GestorEstadoCivil.Consultar();
            cboEstadoCivil.DataTextField = "Descripcion";
            cboEstadoCivil.DataValueField = "OID";
            cboEstadoCivil.DataBind();
            cboEstadoCivil.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            this.cboNacionalidad.DataSource = GestorPaises.Consultar();
            cboNacionalidad.DataTextField = "Nombre";
            cboNacionalidad.DataValueField = "OID";
            cboNacionalidad.DataBind();
            cboNacionalidad.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            this.cboCondicionIVA.DataSource = GestorCondicionAfip.Consultar();
            cboCondicionIVA.DataTextField = "Descripcion";
            cboCondicionIVA.DataValueField = "OID";
            cboCondicionIVA.DataBind();
            cboCondicionIVA.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            cboTipoContacto.DataSource = GestorTipoContacto.Consultar();
            cboTipoContacto.DataTextField = "Descripcion";
            cboTipoContacto.DataValueField = "OID";
            cboTipoContacto.DataBind();
            cboTipoContacto.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            //this.cboDcilioTipoContacto.DataSource = (List<TipoContacto>)cboTipoContacto.DataSource;
            this.cboDcilioTipoContacto.DataSource = GestorTipoContacto.Consultar();
            cboDcilioTipoContacto.DataTextField = "Descripcion";
            cboDcilioTipoContacto.DataValueField = "OID";
            cboDcilioTipoContacto.DataBind();
            cboDcilioTipoContacto.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            this.cboBanco.DataSource = GestorBanco.Consultar();
            cboBanco.DataTextField = "Nombre";
            cboBanco.DataValueField = "OID";
            cboBanco.DataBind();
            cboBanco.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));

            this.cboPais.DataSource = GestorPaises.Consultar();
            cboPais.DataTextField = "Nombre";
            cboPais.DataValueField = "OID";
            cboPais.DataBind();

            cboPais.SelectedIndex = 2;
            //this.cbProvincia.DataSource = GestorProvincia.Consultar(null, null, null, Convert.ToInt32(cboPais.SelectedValue), null);
            //cbProvincia.DataTextField = "Nombre";
            //cbProvincia.DataValueField = "OID";
            //cbProvincia.DataBind();

            //this.cbProvincia.SelectedIndex = 1;
            //this.cboCiudad.DataSource = GestorCiudad.Consultar(null, null, null, Convert.ToInt32(cbProvincia.SelectedValue), null);
            //cboCiudad.DataTextField = "Nombre";
            //cboCiudad.DataValueField = "OID";
            //cboCiudad.DataBind();

            this.cboTipoContrato.DataSource = GestorTipoContrato.Consultar();
            cboTipoContrato.DataTextField = "Descripcion";
            cboTipoContrato.DataValueField = "OID";
            cboTipoContrato.DataBind();
            cboTipoContrato.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));


            this.cboTipoCuentaBancaria.DataSource = GestorTipoCuentaBancaria.Consultar();
            cboTipoCuentaBancaria.DataTextField = "Nombre";
            cboTipoCuentaBancaria.DataValueField = "OID";
            cboTipoCuentaBancaria.DataBind();
            cboTipoCuentaBancaria.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));


            this.cboEntidad.DataSource = GestorEntidades.Consultar();
            cboEntidad.DataTextField = "Denominacion";
            cboEntidad.DataValueField = "OID";
            cboEntidad.DataBind();
            cboEntidad.Items.Insert(0, new ListItem("--Seleccione-- ", "0"));


            this.cboArea.DataSource = GestorArea.Consultar();
            cboArea.DataTextField = "Descripcion";
            cboArea.DataValueField = "OID";
            cboArea.DataBind();
            cboArea.Items.Insert(0, new ListItem("--Ninguna-- ", "0"));

            this.cboPuesto.DataSource = GestorPuesto.Consultar();
            this.cboPuesto.DataTextField = "Descripcion";
            this.cboPuesto.DataValueField = "OID";
            this.cboPuesto.DataBind();
            cboPuesto.Items.Insert(0, new ListItem("--Ninguno-- ", "0"));


        }

        protected void btn_AltaContacto_Click(object sender, EventArgs e)
        {

            if ((!string.IsNullOrEmpty(txtTelefono.Text)) || (!String.IsNullOrEmpty(txtEmail.Text)) || (!string.IsNullOrEmpty(txtFax.Text)))
            {

                int idcontacto = this.hidContacto.Value.ToInteger();
                if (idcontacto > 0)
                {
                    foreach (var item in Persona.Contactos.Where(x => x.OID == idcontacto))
                    {
                        item.Email = this.txtEmail.Text;
                        item.Telefono = this.txtTelefono.Text;
                        item.Fax = this.txtFax.Text;
                        item.TipoContacto = GestorTipoContacto.Obtener(cboTipoContacto.SelectedValue.ToInteger());
                      
                        if (chkPrincipal.Checked)
                        {
                            Persona.Contactos.ForEach(x => x.Principal = false);
                            item.Principal = true;
                        }
                        else
                        {
                            item.Principal = false;
                        }

                        LoadGridContacts();
                        hidContacto.Value = "0";

                    }
                }

                else
                {
                    Contacto c = new Contacto();
                    c.Email = this.txtEmail.Text;
                    c.Telefono = this.txtTelefono.Text;
                    c.Fax = this.txtFax.Text;
                    c.TipoContacto = GestorTipoContacto.Obtener(cboTipoContacto.SelectedValue.ToInteger());
                   
                    if (chkPrincipal.Checked)
                    {
                        c.Principal = true;
                        Persona.Contactos.ForEach(x => x.Principal = false);

                    }
                    else
                    {
                        c.Principal = false;
                    }
                    Contador = Contador - 1;
                    c.OID = Contador;
                    Persona.Contactos.Add(c);
                    LoadGridContacts();

                }

                this.txtEmail.Text = String.Empty;
                this.txtTelefono.Text = String.Empty;
                this.txtFax.Text = String.Empty;
                this.cboTipoContacto.SelectedValue = "0";
                this.chkPrincipal.Checked = false;
            }


        }
        protected void btn_AgregarDomicilio_Click(object sender, EventArgs e)
        {            
            int iddomicilio = hidDomicilio.Value.ToInteger();
            if (iddomicilio != 0)
            {
                foreach (var item in Persona.Domicilios.Where(x => x.OID == iddomicilio))
                {
                    item.TipoContacto = GestorTipoContacto.Obtener(cboDcilioTipoContacto.SelectedValue.ToInteger());
                    item.Calle = txtCalle.Text;
                    item.Altura = this.txtAltura.Text;
                    item.Piso = this.txtPiso.Text;
                    item.Departamento = this.txtDepartamento.Text;
                    item.Interseccion = this.txtInterseccion.Text;
                    item.CodigoPostal = this.txtCP.Text;
                    item.Ciudad = GestorCiudad.Obtener(cboCiudad.SelectedValue.ToInteger());
                    //item.Ciudad = GestorCiudad.Obtener(this.hidCiudad.Value.ToInteger());
                    item.Observaciones = this.txtDcilio_Observacion.Text;

                    if (chkDomicilioPcipal.Checked)
                    {
                        Persona.Domicilios.ForEach(x => x.Principal = false);
                        item.Principal = true;
                    }
                    else
                    {
                        item.Principal = false;
                    }

                }
                LoadGridDomicilios();
                hidDomicilio.Value = "0";
                ScriptManager.RegisterStartupScript(Page, typeof(Page), "Activar", "ActivarSolapaDomicilio(); ", true);
            }
            else

            {
                Domicilio domicilio = new Domicilio();
                domicilio.TipoContacto = GestorTipoContacto.Obtener(cboDcilioTipoContacto.SelectedValue.ToInteger());
                domicilio.Calle = txtCalle.Text;
                domicilio.Altura = this.txtAltura.Text;
                domicilio.Piso = this.txtPiso.Text;
                domicilio.Departamento = this.txtDepartamento.Text;
                domicilio.Interseccion = this.txtInterseccion.Text;
                domicilio.CodigoPostal = this.txtCP.Text;
                domicilio.Ciudad = GestorCiudad.Obtener(this.hidCiudad.Value.ToInteger());
                domicilio.Observaciones = this.txtDcilio_Observacion.Text;

                if (chkDomicilioPcipal.Checked)
                {
                    domicilio.Principal = true;
                    Persona.Domicilios.ForEach(x => x.Principal = false);

                }
                else
                {
                    domicilio.Principal = false;
                }

                this.contadorDomicilio = contadorDomicilio - 1;
                domicilio.OID = contadorDomicilio;
                Persona.Domicilios.Add(domicilio);
                LoadGridDomicilios();
                       
            }
        }

        protected void btn_AgregarCuentaBancaria_Click(object sender, EventArgs e)
        {
            int idcuentaBancaria = this.hidCuentaBancaria.Value.ToInteger();
            if (idcuentaBancaria != 0)
            {
                foreach (var item in Persona.CuentasBancarias.Where(x => x.OID == idcuentaBancaria))
                {
                    item.Banco = GestorBanco.Obtener(cboBanco.SelectedValue.ToInteger());
                    item.TipoCuentaBancaria = GestorTipoCuentaBancaria.Obtener(cboTipoCuentaBancaria.SelectedValue.ToInteger()); ;
                    item.Sucursal = this.txtSucursal.Text;
                    item.Direccion = this.txtCtaDireccion.Text;
                    item.Denominacion = this.txtDenominacion.Text;
                    item.Numero = this.txtNumero.Text;
                    item.CBU = this.txtCBU.Text;
                   
                    if (chkCuentaBancPrincipal.Checked)
                    {
                        Persona.CuentasBancarias.ForEach(x => x.Principal = false);
                        item.Principal = true;
                    }
                    else
                    {
                        item.Principal = false;
                    }
                }

                LoadGridCuentaBancarias();
                hidCuentaBancaria.Value = "0";
              
            }

            else
            {
                CuentaBancaria cuentaBancaria = new CuentaBancaria();
                cuentaBancaria.Banco = GestorBanco.Obtener(this.cboBanco.SelectedValue.ToInteger());
                cuentaBancaria.Numero = this.txtNumero.Text;
                cuentaBancaria.Denominacion = this.txtDenominacion.Text;
                cuentaBancaria.CBU = this.txtCBU.Text;
                cuentaBancaria.TipoCuentaBancaria = GestorTipoCuentaBancaria.Obtener(this.cboTipoCuentaBancaria.SelectedValue.ToInteger());
                cuentaBancaria.Sucursal = this.txtSucursal.Text;
                cuentaBancaria.Localidad = this.txtCtaDireccion.Text;
                cuentaBancaria.Direccion = this.txtCtaDireccion.Text;

                if (chkCuentaBancPrincipal.Checked)
                {
                    cuentaBancaria.Principal = true;
                    Persona.CuentasBancarias.ForEach(x => x.Principal = false);

                }
                else
                {
                    cuentaBancaria.Principal = false;
                }

                this.contadorCuentaBancaria = contadorCuentaBancaria - 1;
                cuentaBancaria.OID = contadorCuentaBancaria;
                Persona.CuentasBancarias.Add(cuentaBancaria);
                LoadGridCuentaBancarias();

                this.cboBanco.SelectedValue = "0";
            }

            this.txtNumero.Text = string.Empty; 
            this.txtDenominacion.Text = string.Empty;
            this.txtCBU.Text = string.Empty;
            this.txtSucursal.Text =string.Empty;
            this.txtCtaDireccion.Text = string.Empty;
            this.txtCtaDireccion.Text = string.Empty;
            this.cboTipoCuentaBancaria.SelectedValue = "0";


        }

        protected void btn_AgregarContrato_Click(object sender, EventArgs e)
        {
            try
            {                    
                int idcontrato = this.hidContrato.Value.ToInteger();
                if (idcontrato != 0)
                {
                    foreach (var item in Persona.Contratos.Where(x => x.OID == idcontrato))
                    {
                        item.TipoContrato = GestorTipoContrato.Obtener(this.cboTipoContrato.SelectedValue.ToInteger());
                        item.Objetivos = this.txtObjetivos.Text;
                        item.Monto = Convert.ToDecimal(this.txtMonto.Text);
                        item.CodigoPOA = this.txtCodigoPOA.Text;

                    }

                    hidContrato.Value = "0";
                    LoadGridContratos();

                }
                else
                {
                    Contrato contrato = new Contrato();
                    contrato.TipoContrato = GestorTipoContrato.Obtener(this.cboTipoContrato.SelectedValue.ToInteger());
                    contrato.Objetivos = this.txtObjetivos.Text;
                    if (!string.IsNullOrEmpty(this.txtMonto.Text))
                    {
                        contrato.Monto = Convert.ToDecimal(this.txtMonto.Text);
                    }
                    contrato.CodigoPOA = this.txtCodigoPOA.Text;

                    contadorContrato = contadorContrato - 1;
                    contrato.OID = contadorContrato;

                    Persona.Contratos.Add(contrato);
                    LoadGridContratos();

                }

                this.txtMonto.Text = string.Empty;
                this.txtObjetivos.Text = string.Empty;
                this.cboTipoContrato.SelectedValue = "0";
                this.txtCodigoPOA.Text = string.Empty;

            }
            catch (Exception ex)
            { 
            
            }

        }
        
        protected void GridCuentaBancaria_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Borrar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(GridCuentaBancaria.DataKeys[index].Value);


                if (id > 0)
                {
                    CuentaBancaria cuentaBancaria = Persona.CuentasBancarias.Where(x => x.OID == id).FirstOrDefault();
                    cuentaBancaria.Persistencia = EstadoPersistencia.DELETE;

                }
                else
                {
                    Persona.CuentasBancarias.RemoveAt(index);

                }
                LoadGridCuentaBancarias();
            }

            if (e.CommandName == "Editar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int oid = Convert.ToInt32(GridCuentaBancaria.DataKeys[index].Value);
                this.hidCuentaBancaria.Value = oid.ToString();
                CuentaBancaria cuentaBancaria;
                cuentaBancaria = Persona.CuentasBancarias.Find(x => x.OID == oid);
               
                cboBanco.SelectedValue = cuentaBancaria.Banco.OID.ToString();
                cboTipoCuentaBancaria.SelectedValue = cuentaBancaria.TipoCuentaBancaria.OID.ToString();
                txtSucursal.Text = cuentaBancaria.Sucursal;
                txtCtaDireccion.Text = cuentaBancaria.Direccion;
                txtCtaLocalidad.Text = cuentaBancaria.Localidad;
                txtDenominacion.Text = cuentaBancaria.Denominacion;
                txtNumero.Text = cuentaBancaria.Numero;
                txtCBU.Text = cuentaBancaria.CBU;
                chkCuentaBancPrincipal.Checked = cuentaBancaria.Principal;



                UpdatePanel5.Update();

                ScriptManager.RegisterStartupScript(Page, typeof(Page), "DialogCuentaBancaria", "DialogCuentaBancaria(); ", true);

            }


        }

        protected void GridContacto_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Borrar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(GridContacto.DataKeys[index].Value);


                if (id > 0)
                {
                    Contacto contacto = Persona.Contactos.Where(x => x.OID == id).FirstOrDefault();
                    contacto.Persistencia = EstadoPersistencia.DELETE;

                }
                else
                {
                    Persona.Contactos.RemoveAt(index);

                }
                LoadGridContacts();
            }
            if (e.CommandName == "Editar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int oid = Convert.ToInt32(GridContacto.DataKeys[index].Value);
                this.hidContacto.Value = oid.ToString();
                Contacto contacto;
                contacto = Persona.Contactos.Find(x => x.OID == oid);
                cboTipoContacto.SelectedValue = contacto.TipoContacto.OID.ToString();
                txtEmail.Text = contacto.Email;
                txtTelefono.Text = contacto.Telefono;
                txtFax.Text = contacto.Fax;
                chkPrincipal.Checked = contacto.Principal;
                
                UpdatePanel2.Update();

                ScriptManager.RegisterStartupScript(Page, typeof(Page), "Edicion", "EdicionContacto(); ", true);

            }


        }

        protected void GridDomicilio_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Borrar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(GridDomicilio.DataKeys[index].Value);


                if (id > 0)
                {
                    Domicilio domicilio = Persona.Domicilios.Where(x => x.OID == id).FirstOrDefault();
                    domicilio.Persistencia = EstadoPersistencia.DELETE;

                }
                else
                {
                    Persona.Domicilios.RemoveAt(index);

                }
                LoadGridDomicilios();
            }
            if (e.CommandName == "Editar")
            {
                try
                {


                    int index = Convert.ToInt32(e.CommandArgument);
                    int oid = Convert.ToInt32(GridDomicilio.DataKeys[index].Value);
                    this.hidDomicilio.Value = oid.ToString();
                    Domicilio domicilio;
                    domicilio = Persona.Domicilios.Find(x => x.OID == oid);

                    cboDcilioTipoContacto.SelectedValue = domicilio.TipoContacto.OID.ToString();
                    txtCalle.Text = domicilio.Calle;
                    txtAltura.Text = domicilio.Altura.ToString();
                    txtPiso.Text = domicilio.Piso.ToString();
                    txtDepartamento.Text = domicilio.Departamento;
                    this.cbProvincia.DataSource = GestorProvincia.Consultar();
                    cbProvincia.DataTextField = "Nombre";
                    cbProvincia.DataValueField = "OID";
                    cbProvincia.DataBind();

                    this.cboCiudad.DataSource = GestorCiudad.Consultar();
                    cboCiudad.DataTextField = "Nombre";
                    cboCiudad.DataValueField = "OID";
                    cboCiudad.DataBind();

                    cbProvincia.SelectedValue = domicilio.Ciudad.Provincia.OID.ToString();
                    cboCiudad.SelectedValue = domicilio.Ciudad.OID.ToString();
                    cboPais.SelectedValue = domicilio.Ciudad.Provincia.Pais.OID.ToString();
                    txtDcilio_Observacion.Text = domicilio.Observaciones;
                    txtCP.Text = domicilio.CodigoPostal;
                    chkDomicilioPcipal.Checked = domicilio.Principal;

                    this.hidCiudad.Value = domicilio.Ciudad.OID.ToString();
                    hidProvincia.Value = domicilio.Ciudad.Provincia.OID.ToString();
                    UpdatePanel3.Update();

                    ScriptManager.RegisterStartupScript(Page, typeof(Page), "Edicion", "DialogDomicilio(); ", true);

                }
                catch (Exception)
                {

                }


            }
            

        }

        protected void GridCuentaBancaria_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                if (Borrar != null)
                {
                    Borrar.Settings(new ImageButtonExtDelete());
                }

            }
            ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
            if (Editar != null)
            {

                Editar.Settings(new ImageButtonExtEdit());

            }


        }

        protected void GridDomicilio_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                if (Borrar != null)
                {
                    Borrar.Settings(new ImageButtonExtDelete());
                }

            }
            
            ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
            if (Editar != null)
            {

                Editar.Settings(new ImageButtonExtEdit());

            }


        }

        protected void GridContacto_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
              
                    ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                    if (Borrar != null)
                    {
                        Borrar.Settings(new ImageButtonExtDelete());
                    }
                
            }

            ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
            if (Editar != null)
            {

                Editar.Settings(new ImageButtonExtEdit());

            }


        }

        #region GridContrato



        protected void GridContrato_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Borrar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int id = Convert.ToInt32(GridContrato.DataKeys[index].Value);


                if (id > 0)
                {
                    Contrato contrato = Persona.Contratos.Where(x => x.OID == id).FirstOrDefault();
                    contrato.Persistencia = EstadoPersistencia.DELETE;

                }
                else
                {
                    Persona.Contratos.RemoveAt(index);

                }
                LoadGridContratos();
            }

            if (e.CommandName == "Editar")
            {
                int index = Convert.ToInt32(e.CommandArgument);
                int oid = Convert.ToInt32(GridContrato.DataKeys[index].Value);
                this.hidContrato.Value = oid.ToString();
                var contrato = Persona.Contratos.Find(x => x.OID == oid);
                cboTipoContrato.SelectedValue = contrato.TipoContrato.OID.ToString();
                txtObjetivos.Text = contrato.Objetivos; 
                txtMonto.Text = contrato.Monto.ToString();
                txtCodigoPOA.Text = contrato.CodigoPOA;


                UpdatePanel8.Update();

                ScriptManager.RegisterStartupScript(Page, typeof(Page), "Edicion", "DialogContrato(); ", true);

            }

            
        }
                
        protected void GridContrato_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
              
                ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                if (Borrar != null)
                {
                    Borrar.Settings(new ImageButtonExtDelete());
                }

            }

            ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
            if (Editar != null)
            {

                Editar.Settings(new ImageButtonExtEdit());

            }



        }

        #endregion



        protected void btnGuardarPersona_Click(object sender, EventArgs e)
        {
            if ((cboNacionalidad.SelectedIndex == 0) || (cboEstadoCivil.SelectedIndex == 0))
            {
                return;
            }

            try
            {
                MappingControlsToObject();

                if (Persona.Persistencia == EstadoPersistencia.INSERT)
                {
                    var personaExistente = GestorPersona.ConsultaPersonasPorDNI(Persona.DNI);
                    if (personaExistente != null)
                    {

                        var script = @"$(function(){{parent.MensajePersonaDuplicada('{0}');}});";
                        script = string.Format(script, personaExistente.DNI.ToString());
                        ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", script, true);
                        return;

                    }
                }
                GestorPersona.Guardar(Persona);
                Persona.Contactos = null;
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "closedialog", "parent.IntervaloCerrarPopup();", true);


            }
            catch (Exception ex)
            {
               
            }
        }


        #region MappingFromObjectToControls

        private void MappingFromObjectToControls()
        {
            this.txtApellido.Text = Persona.Apellidos;
            this.txtNombre.Text = Persona.Nombres;
            this.txtCuit.Text = Persona.Cuit;
            this.txtDNI.Text = Persona.DNI;
            this.rbSexoM.Checked = Persona.Sexo;
            this.rbSexoF.Checked = !Persona.Sexo;
            this.cboEstadoCivil.SelectedValue = Persona.EstadoCivil == null ? "0" : Persona.EstadoCivil.OID.ToString();
            this.cboNacionalidad.SelectedValue = Persona.Nacionalidad == null ? "0" : Persona.Nacionalidad.OID.ToString();
            this.txtFechaNac.Text = Persona.FechaNacimiento.Value.ToShortDateString();
            this.cboCondicionIVA.SelectedValue = Persona.CondicionAfip == null ? "0" : Persona.CondicionAfip.OID.ToString();
            this.txtObservacion.Text = Persona.Observaciones;
            this.txtFechaInicio.Text = Persona.FechaInicio == null ? null : Persona.FechaInicio.Value.ToShortDateString();
            this.txtFechaFin.Text = Persona.FechaFin == null ? null : Persona.FechaFin.Value.ToShortDateString();
            this.txtHorario.Text = Persona.Horario;
            this.cboEntidad.SelectedValue = Persona.Entidad.ToString();
            this.cboArea.SelectedValue = Persona.Area == null ? "0" : Persona.Area.OID.ToString();
            this.cboPuesto.SelectedValue = Persona.perPUESTO == null ? "0" : Persona.perPUESTO.OID.ToString();

        }
        #endregion

        #region MappingControlsToObject

        private void MappingControlsToObject()
        {
            Persona.Apellidos = this.txtApellido.Text;
            Persona.Nombres = this.txtNombre.Text;
            Persona.FechaNacimiento = txtFechaNac.Text.ToDateTime();
            Persona.Cuit = this.txtCuit.Text;
            Persona.DNI = this.txtDNI.Text;
            Persona.Sexo = rbSexoM.Checked;
            Persona.EstadoCivil = GestorEstadoCivil.Obtener(cboEstadoCivil.SelectedValue.ToInteger());
            Persona.Nacionalidad = GestorPaises.Obtener(cboNacionalidad.SelectedValue.ToInteger());
            Persona.CondicionAfip = GestorCondicionAfip.Obtener(cboCondicionIVA.SelectedValue.ToInteger());
            Persona.Observaciones = string.IsNullOrEmpty(txtObservacion.Text) ? null : txtObservacion.Text.Trim();
            Persona.FechaInicio = this.txtFechaInicio.Text.ToNullableDateTime();
            Persona.FechaFin = this.txtFechaFin.Text.ToNullableDateTime();
            Persona.Entidad = this.cboEntidad.SelectedValue.ToInteger();
            Persona.Area = GestorArea.Obtener(this.cboArea.SelectedValue.ToInteger());
            Persona.perPUESTO = GestorPuesto.Obtener(this.cboPuesto.SelectedValue.ToInteger());

        }
        #endregion
    }

}